package com.shujia.day18;

import java.sql.*;
import java.util.HashMap;

public class Demo03MysqlConParameter {
    public static void main(String[] args) throws Exception {


        /*
           TODO 方式2：
                    可以使用参数传递
                         1.传入具体的信息 url user...
                分析：
                    1.从args中获取，包括驱动，url,user,passwd

                执行命令:
                    java -cp java.jar com.shujia.day18.Demo03MysqlConParameter driver->com.mysql.jdbc.Driver url->jdbc:mysql://master:3306/bigdata_30?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai user->root passwd->123456
         */

        HashMap<String, String> hashMap = new HashMap<>();
        if (args.length > 0) {
            for (String arg : args) {
                // driver->com.mysql.jdbc.Driver
                if (arg.contains("->")) {
                    String[] split = arg.split("->");
                    hashMap.put(split[0], split[1]);
                }else {
                    System.out.println("当前args参数:"+arg+" 不符合规范，要求以 -> 作为分隔符");
                }
            }
        } else {
//            assert
            throw new Exception("相关参数缺失,请输入相关的参数，例如驱动,url,user,passwd并以->作为分隔符");
        }

        /*
            TODO 如何支持传入的参数具有识别大小写的功能，并且参数值都可以取出 ？
                自行思考
         */
        if (hashMap.size() >= 4){
            String[] allKeys = {"driver","url","user","passwd"};
            for (String key : allKeys) {
                if (!hashMap.containsKey(key)) {
                    throw new Exception("参数缺失:"+key+"请输入相关的参数，例如驱动,url,user,passwd并以->作为分隔符");
                }
            }
        }else {
            throw new Exception("请输入相关的参数，例如驱动,url,user,passwd并以->作为分隔符");
        }

//        System.out.println(hashMap);


        /*
            TODO 1.加载驱动
         */
        Class.forName(hashMap.get("driver"));


        /*
            TODO 2.创建连接 -> 通过给定一些URL 用户名 密码 获取数据库连接对象
         */

        Connection connection = DriverManager.getConnection(hashMap.get("url"), hashMap.get("user"), hashMap.get("passwd"));
//        DriverManager.get

        // TODO 3.获取操作对象  -> 通过操作对象，可以执行SQL等操作
        Statement statement = connection.createStatement();

        // TODO 4.编写SQL并执行
        String sql = "select * from students";
        ResultSet resultSet = statement.executeQuery(sql);

        // TODO 5.如果当SQL有返回结果，那么需要对结果进行遍历
        while (resultSet.next()) {

            String id = resultSet.getString("id");
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            String gender = resultSet.getString("gender");
            String clazz = resultSet.getString("clazz");
            System.out.println(id + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz);
        }

        // TODO 6.对操作对象以及连接进行关闭操作
        statement.close();
        connection.close();


    }
}
